home *** CD-ROM | disk | FTP | other *** search
Wrap
'********************************************************************* '* Micro Cookbook Installation Script '* Designed for use with Microsoft Setup '* '* (c) 1993, 1994 Pinpoint Publishing. All Rights Reserved '********************************************************************* '$DEFINE DEBUG ''Define for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST IDS_NOTEXTEDITOR = 1 CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST APPHELP = 900 CONST NOFREESPACE = 6300 CONST BADPATH = 6400 CONST MCB_DETECTED = 108 CONST MCB_HELP = 109 CONST STANDBY = 110 CONST STD_MODE = 133 CONST SW_SHOWMAXIMIZED = 3 ''Bitmap ID CONST LOGO = 1 ''Function constants CONST FULLSPACE = 7000000 CONST UPDATESPACE = 2000000 GLOBAL DEST$ ''Default destination directory. GLOBAL OPTCUR$ ''Option selection from option dialog. GLOBAL VER_DATE$ GLOBAL MDLSSDLG$ ''Modeless dialog procedure name. GLOBAL LHD$ ''Local Hard Disk Value list GLOBAL SRCHFILE$ GLOBAL VERFILE$ GLOBAL CUIDLL$ GLOBAL INSTMODE$ GLOBAL MCBPRESENT% DECLARE SUB Install DECLARE SUB DeleteCDXFiles DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION LoadResString(UserDLL$, Resource%) AS STRING declare function LoadLibrary lib "Kernel" (lpstr$) as integer declare sub FreeLibrary lib "Kernel" (hinstance%) declare function LoadString lib "User" (hinstance%, uint%, lpstr$, i%) as integer INIT: CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure MDLSSDLG$ = "FModelessDlgProc" ''Modeless dialog box procedure SRCHFILE$ = "CB40.DAT" INSTMODE$ = "FULL" MCBPRESENT% = FALSE i%=ShowWindow(HWndFrame(), SW_SHOWMAXIMIZED) SetBitmap CUIDLL$, LOGO IF i%=0 THEN GOTO QUIT END IF SetTitle "Micro Cookbook 4.0 for Windows" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "MCBWIN.INF" END IF ReadInfFile szInf$ INSUFFPROC: IF GetProcessorType() < 3 THEN i% = DoMsgBox("The Micro Cookbook requires a 386 or higher processor to operate.","Setup Error!",MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF INSUFFWINVER: '' Check for sufficient revision of Windows. IF GetWindowsMajorVersion() < 3 AND GetWindowsMinorVersion() < 1 THEN i% = DoMsgBox("The Micro Cookbook requires Windows 3.1 or later to operate.","Setup Error!",MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF STDMODE: IF GetWindowsMode() < 2 THEN sz$ = UIStartDlg(CUIDLL$, STD_MODE, "FInfoDlgProc", 0, "") UIPop 1 END IF NOMOUSE: '' Check for presence of mouse (not required, but recommended) IF HasMouseInstalled() = 0 THEN i% = DoMsgBox("Setup did not detect the presence of a mouse. Although it is not required, a mouse is recommended for using The Micro Cookbook.","Setup Warning",MB_TASKMODAL+MB_ICONINFORMATION+MB_OK) END IF OPTCUR$ = "1" '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal WinDrive$ = MID$(GetWindowsDir, 1, 1) IF IsDriveValid(WinDrive$) = 0 THEN i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF '$ENDIF ''DEBUG WELCOME: sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO WELCOME END IF GETPATH: DEST$="C:\COOK4" SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) DEST$ = GetSymbolValue("EditTextOut") UIPop 1 IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO WELCOME ELSE GOSUB ASKQUIT GOTO GETPATH END IF OVERWRITE: sz$ = FindFileInTree(SRCHFILE$, DEST$) if sz$<>"" then MCBPRESENT = TRUE sz$=UIStartDlg(CUIDLL$, MCB_DETECTED,"FInfoDlgProc",MCB_HELP, HELPPROC$) UIPop 1 if sz$="CONTINUE" then INSTMODE$="UPDATE" GOTO GETSPACE END IF IF sz$="EXIT" THEN INSTMODE$="FULL" GOTO GETSPACE END IF IF sz$="BACK" THEN GOTO GETPATH END IF end if GETSPACE: SetSymbolValue "EditTextIn", DEST$ '' Change the default path back to install path SetSymbolValue "EditFocus", "END" DestDrive$=MID$(DEST$,1,1) i%=IsDriveValid(DestDrive$) '' Check for valid drive, first off IF i%=0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF '' Already checked for a valid drive to install update files. j& = GetFreeSpaceForDrive(DestDrive$) '' Check for the amount of free IF j&=0 THEN '' space. If 0, drive isn't valid GOSUB BADPATH GOTO GETPATHL1 END IF IF INSTMODE$ = "UPDATE" THEN SpaceReq& = UPDATESPACE ELSE SpaceReq& = FULLSPACE END IF IF j& < SpaceReq& THEN '' Handle insufficient space on selected drive. sz$ = UIStartDlg(CUIDLL$, NOFREESPACE,"FEditDlgProc", APPHELP, HELPPROC$) UIPop 1 GOTO GETPATHL1 END IF GOTSPACE: Install QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 END ERRQUIT: i% = DoMsgBox("Setup sources were corrupted, call (707) 523-0400!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Install STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") CreateDir DEST$, cmoNone IF INSTMODE$="FULL" THEN AddSectionFilesToCopyList "Root", SrcDir$, DEST$ END IF IF MCBPRESENT = TRUE THEN DeleteCDXFiles END IF AddSectionFilesToCopyList "Updates",SrcDir$, DEST$ CopyFilesInCopyList TxtView$ = GetIniKeyString("WIN.INI","Extensions","txt") if TxtView$<>"" then i% = InStr(TxtView$," ") if i% > 0 then TxtView$ = mid$(TxtView$, 1, i%) TxtView$ = TxtView$ + MakePath(DEST$,"readme.txt") end if end if HlpView$=GetIniKeyString("WIN.INI", "Extensions", "hlp") if HlpView$<>"" then i%=InStr(HlpView$," ") if i%>0 then HlpView$ = mid$(HlpView$, 1, i%) HlpView$ = HlpView$ + MakePath(DEST$,"cb40.hlp") end if end if CreateProgmanGroup "Micro Cookbook 4.0", "", cmoNone ShowProgmanGroup "Micro Cookbook 4.0", 1, cmoNone CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook", MakePath(DEST$,"cookbook.exe"), "", cmoOverwrite if TxtView$ <> "" then CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook Read Me", TxtView$, "", cmoOverwrite end if if HlpView$ <> "" then CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook Help", HlpView$, "", cmoOverwrite end if if TxtView$ <> "" then Run TxtView$ else if HlpView$ <> "" then Run HlpView$ end if else rz$ = LoadResString(CUIDLL$, IDS_NOTEXTEDITOR) i% = DoMsgBox(rz$, "Setup Error", IDOK) end if END SUB '************************************************************************* '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION '*********************************************************************************** '** Purpose: '** Loads resource string from user's DLL to be used in an informational dialog '** Arguments: '** UserDLL$ - name of the user library to be used '** Resource% - Resource ID number of the string to load '** Returns: '** String associated with Resource ID, null string if not found. '*********************************************************************************** FUNCTION LoadResString(UserDLL$, Resource%) STATIC AS STRING UserLib$=UserDLL$ ' Need to do this, as UserDLL$ is passed by reference and gets i% = LoadLibrary(UserLib$) ' thrashed by the call to LoadString. r% = LoadString(i%, Resource%, result$, 256) FreeLibrary(i%) LoadResString$ = result$ if r% = 0 then return end if END FUNCTION SUB DeleteCDXFiles STATIC RemoveFile MakePath(DEST$,"CB4001.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4002.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4003.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4004.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4005.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4006.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4007.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4008.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4009.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4010.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4011.CDX"), cmoNone RemoveFile MakePath(DEST$,"CB4002.IA"), cmoNone RemoveFile MakePath(DEST$,"CB4006.IA"), cmoNone END SUB